package com.dao.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.classic.Session;
import org.omg.CosNaming.NamingContextPackage.NotFound;
import org.springframework.stereotype.Repository;

import com.dao.IBisDataDao;
import com.model.Bis_data;
import com.model.UUIDObject;
import com.tx.Xplstdat.XplstdatI;
import com.tx.Xplstdat.XplstdatIA;
import com.tx.Xplstdat.XplstdatO;
import com.tx.Xplstdat.XplstdatOA;
import com.util.GUIDGenerator;
import com.util.Util;

import static com.def.GenericDef.*;

@Repository
public class BisDataHibernateDao extends GenericHibernateDao<Bis_data, String>
		implements IBisDataDao {

	/**********
	 * 根据主键获取内容，只获取一条 给其它函数调用，不接收tx逻辑
	 * ***********/
	public Bis_data getDataByKeyProc(String data_cate, String data_id,
			String data_ext,String data_item) {
		String hql = "FROM Bis_data where data_cate =:data_cate AND "
				+ "data_id=:data_id AND " + "data_ext=:data_ext AND "+ "data_item=:data_item";

		Query query = this.getHibernateTemplate().getSessionFactory()
				.getCurrentSession().createQuery(hql);
		query.setString("data_cate", data_cate);
		query.setString("data_id", data_id);
		query.setString("data_ext", data_ext);
		query.setString("data_item", data_item);
		Bis_data bis_data = (Bis_data) query.uniqueResult();
		return bis_data;
	}

	public XplstdatO addProc(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		List<XplstdatOA> oaryList = new ArrayList<XplstdatOA>();
		
		try {
			List<XplstdatIA> iaryList = xplstdatI.getIary();
			// long tbl_cnt = xplstdatI.getTbl_cnt();
			for (XplstdatIA iary : iaryList) {
				Bis_data bis_data = new Bis_data();

				Bis_data tmp_bis_data = this.getDataByKeyProc(
						iary.getData_cate(), iary.getData_id(),
						iary.getData_ext(),iary.getData_item());
				if (tmp_bis_data != null && !iary.getData_cate().equals("DFCT")) {
					xplstdatO.setRtn_code(E_BIS_DATA + E_ADD_EXIST + "");
					xplstdatO.setRtn_mesg("Record Already Exist");
					return xplstdatO;
				}
				if(iary.getData_cate().equals("CUSD")){
					String hql = "FROM Bis_data where data_item ='" + iary.getData_item() + "'";
					List<Bis_data> bis_dataList = this.find(hql);
					if(bis_dataList.size()>0){
						xplstdatO.setRtn_code(E_BIS_DATA + E_ADD_EXIST + "");
						xplstdatO.setRtn_mesg("Record Already Exist");
						return xplstdatO;
					}
				}
				bis_data.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data.setData_cate(iary.getData_cate());
				bis_data.setData_id(iary.getData_id());
				bis_data.setData_ext(iary.getData_ext());
				bis_data.setData_item(iary.getData_item());
				bis_data.setExt_1(iary.getExt_1());
				bis_data.setExt_2(iary.getExt_2());
				bis_data.setExt_3(iary.getExt_3());
				bis_data.setExt_4(iary.getExt_4());
				bis_data.setExt_5(iary.getExt_5());
				bis_data.setData_desc(iary.getData_desc());
				this.save(bis_data);
				
				XplstdatOA oary = new XplstdatOA();
				oary.setData_seq_id(bis_data.getData_seq_id());
				oary.setData_cate(bis_data.getData_cate());
				oary.setData_id(bis_data.getData_id());
				oary.setData_ext(bis_data.getData_ext());
				oary.setData_item(bis_data.getData_item());
				oary.setData_desc(bis_data.getData_desc());
				oary.setExt_1(bis_data.getExt_1());
				oary.setExt_2(bis_data.getExt_2());
				oary.setExt_3(bis_data.getExt_3());
				oary.setExt_4(bis_data.getExt_4());
				oary.setExt_5(bis_data.getExt_5());
				oaryList.add(oary);
			}
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code("0000003");
			xplstdatO.setRtn_mesg(Util.stackTraceToString(ex));
			return xplstdatO;
		}
		xplstdatO.setOary(oaryList);
		xplstdatO.setTbl_cnt(oaryList.size());
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}

	public Bis_data getRuleProc(String specCate,String cusId,String mdlId,String woId,String pathId,String opeId) {

		StringBuffer hql = new StringBuffer("FROM Bis_data where data_cate =  ? and data_desc = ?");



		hql.append(" AND ext_1 in('*','").append(cusId).append("') ");
		hql.append(" AND ext_2 in('*','").append(mdlId).append("') ");
		hql.append(" AND ext_3 in('*','").append(woId).append("') ");
		hql.append(" AND ext_4 in('*','").append(pathId).append("') ");
		hql.append(" AND ext_5 in('*','").append(opeId).append("') ");
		hql.append(" order by ext_1 desc ,ext_2 desc,ext_3 desc ,ext_4 desc,ext_5 desc");

		logger.info(hql.toString());

		List<Bis_data> specialRuleList = this.list( hql.toString(),"SPRU",specCate);

		if(!specialRuleList.isEmpty()){
			return specialRuleList.get(0);
		}

		List<Bis_data> commonRuleList = this.list( hql.toString(),"CMRU",specCate);


		if(!commonRuleList.isEmpty()){
			Bis_data bisData = commonRuleList.get(0);

			logger.info(bisData);

			return bisData;
//			Bis_data common = new Bis_data();
//			common.setData_cate(bisData.getData_cate());
//			common.setData_id(bisData.getData_id());
//			logger.info("thickness:" + thickness);
//			if(thickness !=null){
//				double  usl = Double.valueOf(bisData.getData_ext())+thickness;
//				double  lsl= thickness-Double.valueOf(bisData.getData_item());
//				logger.info("usl:" + usl);
//				logger.info("lsl:" + lsl);
//				common.setData_ext(String.valueOf(usl));
//				common.setData_item(String.valueOf(lsl));
//			}else{
//				common.setData_item(bisData.getData_item());
//				common.setData_ext(bisData.getData_ext());
//			}
//
//			common.setData_desc(bisData.getData_desc());
//			common.setExt_1(bisData.getExt_1());
//			common.setExt_2(bisData.getExt_2());
//			common.setExt_3(bisData.getExt_3());
//			common.setExt_4(bisData.getExt_4());
//			common.setExt_5(bisData.getExt_5());
//
//			return common;
		}
		return null;

	}


	public XplstdatO updateProc(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		try {
			List<XplstdatIA> iaryList = xplstdatI.getIary();
			for (XplstdatIA iary : iaryList) {
				Bis_data bis_data = null;
				String data_seq_id = iary.getData_seq_id();
				String data_cate = iary.getData_cate();
				String data_id = iary.getData_id();
				String data_ext = iary.getData_ext();
				String data_item = iary.getData_item();
				String ext_1 = iary.getExt_1();
				String ext_2 = iary.getExt_2();
				String ext_3 = iary.getExt_3();
				String ext_4 = iary.getExt_4();
				String ext_5 = iary.getExt_5();
				String data_desc = iary.getData_desc();
				
				if(data_seq_id!=null){
					bis_data = this.get(data_seq_id);
				}else{
					String hql = " from Bis_data where data_cate=?"
							+ "and data_id= ? and data_ext=?";
					bis_data = (Bis_data) this.uniqueResultWithLock(hql,data_cate,data_id,data_ext);
				}
				if(bis_data ==null){
					xplstdatO.setRtn_code(E_BIS_DATA + E_READ_NOT_FOUND + "");
					xplstdatO.setRtn_mesg("[Bis_data] Record Not Found");
					return xplstdatO;
				}
				if(data_ext!=null){
					bis_data.setData_ext(data_ext);
				}
				if (data_item != null) {
					bis_data.setData_item(data_item);
				}
				if (ext_1 != null) {
					bis_data.setExt_1(ext_1);
				}
				if (ext_2 != null) {
					bis_data.setExt_2(ext_2);
				}
				if (ext_3 != null) {
					bis_data.setExt_3(ext_3);
				}
				if (ext_4 != null) {
					bis_data.setExt_4(ext_4);
				}
				if (ext_5 != null) {
					bis_data.setExt_5(ext_5);
				}
				if (data_desc != null) {
					bis_data.setData_desc(data_desc);
				}
				this.update(bis_data);
			}
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}

	public XplstdatO deleteProc(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			List<XplstdatIA> iaryList = xplstdatI.getIary();
			for (XplstdatIA iary : iaryList) {
				if(iary.getData_seq_id()!=null){
					this.deleteByKey(iary.getData_seq_id());
				}else{
					String data_cate = iary.getData_cate();
					String data_id = iary.getData_id();
					String data_ext = iary.getData_ext();
					String hql = " from Bis_data where data_cate=:data_cate "
							+ "and data_id=:data_id and data_ext=:data_ext";
					Query query = this.getHibernateTemplate().getSessionFactory()
							.getCurrentSession().createQuery(hql);
					
					query.setString("data_cate", data_cate);
					query.setString("data_id", data_id);
					query.setString("data_ext", data_ext);
					Bis_data bis_data = (Bis_data) query.uniqueResult();
					if (bis_data == null) {
						xplstdatO.setRtn_code(E_BIS_DATA + E_READ_NOT_FOUND + "");
						xplstdatO.setRtn_mesg("[Bis_data] Record Not Found");
						return xplstdatO;
					}
					this.delete(bis_data);
				}
			}
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}

	public XplstdatO queryByCondition(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String dataCate = iary.getData_cate();
			String hql = "FROM Bis_data where data_cate ='"
					+ iary.getData_cate() + "'";
			if (iary.getData_id() != null && !Util.isSpaceCheck(iary.getData_id())) {
				hql = hql + " AND data_id='" + iary.getData_id() + "' ";
			}
			if (iary.getData_ext() != null && !Util.isSpaceCheck(iary.getData_ext())) {
				hql = hql + " AND data_ext='" + iary.getData_ext() + "'";
			}
			if (iary.getData_item() != null && !Util.isSpaceCheck(iary.getData_item())) {
				hql = hql + " AND data_item ='" + iary.getData_item() + "'";
			}
			if (iary.getExt_1() != null && !Util.isSpaceCheck(iary.getExt_1())) {
				hql = hql + " AND ext_1 ='" + iary.getExt_1() + "'";
			}
			if (iary.getExt_2() != null && !Util.isSpaceCheck(iary.getExt_2())) {
				hql = hql + " AND ext_2 ='" + iary.getExt_2() + "'";
			}
			if (iary.getExt_3() != null && !Util.isSpaceCheck(iary.getExt_3())) {
				hql = hql + " AND ext_3 ='" + iary.getExt_3() + "'";
			}
			if (iary.getExt_4() != null && !Util.isSpaceCheck(iary.getExt_4())) {
				hql = hql + " AND ext_4 ='" + iary.getExt_4() + "'";
			}
			if (iary.getExt_5() != null && !Util.isSpaceCheck(iary.getExt_5())) {
				hql = hql + " AND ext_5 ='" + iary.getExt_5() + "'";
			}
			if("CUSD".equals(dataCate)){
				if(!"Y".equals(iary.getList_all_cus_flg())){
					hql = hql+" AND EXT_5 <>'2'";
				}
				hql = hql + " ORDER BY data_item";
			}else{
				hql = hql + " ORDER BY DATA_CATE,DATA_ID,DATA_EXT";
			}
			List<Bis_data> bis_dataList = this.find(hql);
			List<XplstdatOA> oaryList = new ArrayList<XplstdatOA>();
			for (Bis_data bis_data : bis_dataList) {
				XplstdatOA oary = new XplstdatOA();
				oary.setData_seq_id(bis_data.getData_seq_id());
				oary.setData_cate(bis_data.getData_cate());
				oary.setData_id(bis_data.getData_id());
				oary.setData_ext(bis_data.getData_ext());
				oary.setData_item(bis_data.getData_item());
				oary.setData_desc(bis_data.getData_desc());
				oary.setExt_1(bis_data.getExt_1());
				oary.setExt_2(bis_data.getExt_2());
				oary.setExt_3(bis_data.getExt_3());
				oary.setExt_4(bis_data.getExt_4());
				oary.setExt_5(bis_data.getExt_5());
				oaryList.add(oary);
			}
			xplstdatO.setTbl_cnt(oaryList.size());
			xplstdatO.setOary(oaryList);
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}
	public XplstdatO queryByExt(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String hql = "FROM Bis_data where data_cate ='"
					+ iary.getData_cate() + "'";
			if (iary.getData_ext() != null) {
				hql = hql + " AND data_ext in(" + iary.getData_ext() + ")";
			}
			List<Bis_data> bis_dataList = this.find(hql);
			int tbl_cnt = bis_dataList.size();
			List<XplstdatOA> oaryList = new ArrayList<XplstdatOA>();
			for (Bis_data bis_data : bis_dataList) {
				XplstdatOA oary = new XplstdatOA();
				oary.setData_cate(bis_data.getData_cate());
				oary.setData_id(bis_data.getData_id());
				oary.setData_ext(bis_data.getData_ext());
				oary.setData_item(bis_data.getData_item());
				oary.setData_desc(bis_data.getData_desc());
				oary.setExt_1(bis_data.getExt_1());
				oary.setExt_2(bis_data.getExt_2());
				oary.setExt_3(bis_data.getExt_3());
				oary.setExt_4(bis_data.getExt_4());
				oary.setExt_5(bis_data.getExt_5());
				oaryList.add(oary);
			}
			xplstdatO.setTbl_cnt(oaryList.size());
			xplstdatO.setOary(oaryList);
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}
	
	/**
	 * 查询bis_data by Ext_5
	 * @author Haoyuan.Tian
	 * 2014-11-14
	 */
	public XplstdatO queryByExt5(XplstdatI xplstdatI){
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String hql = "FROM Bis_data where data_cate ='"
					+ iary.getData_cate() + "'";
			if (iary.getExt_5() != null) {
				hql = hql + " AND ext_5 in(" + iary.getExt_5() + ")";
			}
			List<Bis_data> bis_dataList = this.find(hql);
			int tbl_cnt = bis_dataList.size();
			List<XplstdatOA> oaryList = new ArrayList<XplstdatOA>();
			for (Bis_data bis_data : bis_dataList) {
				XplstdatOA oary = new XplstdatOA();
				oary.setData_cate(bis_data.getData_cate());
				oary.setData_id(bis_data.getData_id());
				oary.setData_ext(bis_data.getData_ext());
				oary.setData_item(bis_data.getData_item());
				oary.setData_desc(bis_data.getData_desc());
				oary.setExt_1(bis_data.getExt_1());
				oary.setExt_2(bis_data.getExt_2());
				oary.setExt_3(bis_data.getExt_3());
				oary.setExt_4(bis_data.getExt_4());
				oary.setExt_5(bis_data.getExt_5());
				oaryList.add(oary);
			}
			xplstdatO.setTbl_cnt(oaryList.size());
			xplstdatO.setOary(oaryList);
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}
	
	/*******
	 * 新增data_cate: action_flg = N :NEW
	 * **********/
	public XplstdatO addDataCateProc(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String data_cate = iary.getData_cate();
			String data_desc = iary.getData_desc();
			String hql = "FROM Bis_data where data_cate='CATE' and data_id=:data_id";
			Query query = this.getHibernateTemplate().getSessionFactory()
					.getCurrentSession().createQuery(hql);
			query.setString("data_id", data_cate);
			if (query.list().size() > 0) {
				xplstdatO.setRtn_code(E_BIS_DATA + E_ADD_EXIST + "");
				xplstdatO.setRtn_mesg("Data Cate Already Exist,Please check");
				return xplstdatO;
			}
			Bis_data bis_data = new Bis_data();
			bis_data.setData_seq_id(GUIDGenerator.javaGUID());
			bis_data.setData_cate("CATE");
			bis_data.setData_id(data_cate);
			bis_data.setData_desc(data_desc);
			this.save(bis_data);
			if(!Util.isSpaceCheck(iary.getDsc_data_id())){
				Bis_data bis_data_1 = new Bis_data();
				bis_data_1.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_1.setData_cate("CODE");
				bis_data_1.setData_id(data_cate);
				bis_data_1.setData_ext("DATA_ID");
				bis_data_1.setData_desc(iary.getDsc_data_id());
				this.save(bis_data_1);
			}
			if(!Util.isSpaceCheck(iary.getDsc_data_ext())){
				Bis_data bis_data_2 = new Bis_data();
				bis_data_2.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_2.setData_cate("CODE");
				bis_data_2.setData_id(data_cate);
				bis_data_2.setData_ext("DATA_EXT");
				bis_data_2.setData_desc(iary.getDsc_data_ext());
				this.save(bis_data_2);
			}
			if(!Util.isSpaceCheck(iary.getDsc_data_item())){
				Bis_data bis_data_3 = new Bis_data();
				bis_data_3.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_3.setData_cate("CODE");
				bis_data_3.setData_id(data_cate);
				bis_data_3.setData_ext("DATA_ITEM");
				bis_data_3.setData_desc(iary.getDsc_data_item());
				this.save(bis_data_3);
			}
			if(!Util.isSpaceCheck(iary.getDsc_ext_1())){
				Bis_data bis_data_4 = new Bis_data();
				bis_data_4.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_4.setData_cate("CODE");
				bis_data_4.setData_id(data_cate);
				bis_data_4.setData_ext("EXT_1");
				bis_data_4.setData_desc(iary.getDsc_ext_1());
				this.save(bis_data_4);
			}
			if(!Util.isSpaceCheck(iary.getDsc_ext_2())){
				Bis_data bis_data_5 = new Bis_data();
				bis_data_5.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_5.setData_cate("CODE");
				bis_data_5.setData_id(data_cate);
				bis_data_5.setData_ext("EXT_2");
				bis_data_5.setData_desc(iary.getDsc_ext_2());
				this.save(bis_data_5);
			}
			if(!Util.isSpaceCheck(iary.getDsc_ext_3())){
				Bis_data bis_data_6 = new Bis_data();
				bis_data_6.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_6.setData_cate("CODE");
				bis_data_6.setData_id(data_cate);
				bis_data_6.setData_ext("EXT_3");
				bis_data_6.setData_desc(iary.getDsc_ext_3());
				this.save(bis_data_6);
			}
			if(!Util.isSpaceCheck(iary.getDsc_ext_4())){
				Bis_data bis_data_7 = new Bis_data();
				bis_data_7.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_7.setData_cate("CODE");
				bis_data_7.setData_id(data_cate);
				bis_data_7.setData_ext("EXT_4");
				bis_data_7.setData_desc(iary.getDsc_ext_4());
				this.save(bis_data_7);
			}
			if(!Util.isSpaceCheck(iary.getDsc_ext_5())){
				Bis_data bis_data_8 = new Bis_data();
				bis_data_8.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_8.setData_cate("CODE");
				bis_data_8.setData_id(data_cate);
				bis_data_8.setData_ext("EXT_5");
				bis_data_8.setData_desc(iary.getDsc_ext_5());
				this.save(bis_data_8);
			}
			if(!Util.isSpaceCheck(iary.getDsc_data_dsc())){
				Bis_data bis_data_9 = new Bis_data();
				bis_data_9.setData_seq_id(GUIDGenerator.javaGUID());
				bis_data_9.setData_cate("CODE");
				bis_data_9.setData_id(data_cate);
				bis_data_9.setData_ext("DATA_DESC");
				bis_data_9.setData_desc(iary.getDsc_data_dsc());
				this.save(bis_data_9);
			}
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}

	/********
	 * 更新data_cate action_flg = R :replace
	 * ********/
	public XplstdatO updateDataCateProc(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String hql = "FROM Bis_data where data_cate='CATE' and "
					+ "data_id=:data_id";
			Query query = this.getHibernateTemplate().getSessionFactory()
					.getCurrentSession().createQuery(hql);
			query.setString("data_id", iary.getData_cate());
			Bis_data bis_data = (Bis_data) query.uniqueResult();
			if (bis_data == null) {
				xplstdatO.setRtn_code(E_BIS_DATA + E_READ_NOT_FOUND + "");
				xplstdatO.setRtn_mesg("not found record in Bis_data");
				return xplstdatO;
			}
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}

	/******
	 * 删除DATA_CATE action_flg = C :Cancel
	 * ************/
	public XplstdatO deleteDataCateProc(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String data_cate = iary.getData_cate();
			String hql = "FROM Bis_data where data_cate='CATE' and data_id=:data_id ";
			Session session = this.getHibernateTemplate().getSessionFactory()
					.getCurrentSession();
			Query query = session.createQuery(hql);
			query.setString("data_id", data_cate);
			Bis_data bis_data = (Bis_data) query.uniqueResult();
			if (bis_data == null) {
				xplstdatO.setRtn_code(E_BIS_DATA + E_READ_NOT_FOUND + "");
				xplstdatO.setRtn_mesg("[Bis_data] Record Not Found");
				return xplstdatO;
			}
			this.delete(bis_data);

			String hql2 = "FROM Bis_data where data_cate=:data_cate ";
			Session session2 = this.getHibernateTemplate().getSessionFactory()
					.getCurrentSession();
			Query query2 = session2.createQuery(hql2);

			query2.setString("data_cate", data_cate);
			List<Bis_data> bis_dataList = query2.list();
			for (Bis_data bis_data2 : bis_dataList) {
				this.delete(bis_data2);
			}

			String hql3 = "FROM Bis_data where data_cate='CODE' and data_id=:data_id  ";
			Session session3 = this.getHibernateTemplate().getSessionFactory()
					.getCurrentSession();
			Query query3 = session3.createQuery(hql3);

			query3.setString("data_id", data_cate);
			List<Bis_data> bis_dataList1 = query3.list();
			for (Bis_data bis_data3 : bis_dataList1) {
				this.delete(bis_data3);
			}

		} catch (Exception ex) {
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.getMessage());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}

	public List<Bis_data> queryBisData(String data_cate, String data_id,
			String data_ext, String ext_1, String ext_2, String ext_3,
			String ext_4, String ext_5) {
		List<Bis_data> bisDataList = new ArrayList<Bis_data>();

		String hql = "FROM Bis_data where 1=1 ";
		if (null != data_cate) {
			hql += " AND data_cate = '" + data_cate + "'";
		}
		if (null != data_id) {
			hql += " AND data_id = '" + data_id + "'";
		}
		if (null != data_ext) {
			hql += " AND data_ext = '" + data_ext + "'";
		}
		if (null != ext_1) {
			hql += " AND ext_1 = '" + ext_1 + "'";
		}
		if (null != ext_2) {
			hql += " AND ext_2 = '" + ext_2 + "'";
		}
		if (null != ext_3) {
			hql += " AND ext_3 = '" + ext_3 + "'";
		}
		if (null != ext_4) {
			hql += " AND ext_4 = '" + ext_4 + "'";
		}
		if (null != ext_5) {
			hql += " AND ext_5 = '" + ext_5 + "'";
		}

		hql = hql + " ORDER BY DATA_CATE,DATA_ID,DATA_EXT";
		bisDataList = this.find(hql);

		return bisDataList;
	}

	public HashMap queryDefIdAndDsc() {
		HashMap defHM = new HashMap();
		String hql = "FROM Bis_data where data_cate ='DFCT'";
		List<Bis_data> bis_dataList = this.find(hql);
		if(!bis_dataList.isEmpty()){
			for(Bis_data data : bis_dataList){
				defHM.put(data.getData_id(), data.getData_ext());
			}
		}
		return defHM;
	}
	
	public XplstdatO queryByConditioncs(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String dataCate = iary.getData_cate();
			String hql = "FROM Bis_data where data_cate ='"
					+ iary.getData_cate() + "'";
			if (iary.getData_id() != null) {
				hql = hql + " AND data_id='" + iary.getData_id() + "' ";
			}
			if (iary.getData_ext() != null) {
				hql = hql + " AND data_ext='" + iary.getData_ext() + "'";
			}
			if (iary.getData_item() != null) {
				hql = hql + " AND data_item ='" + iary.getData_item() + "'";
			}
			if (iary.getExt_1() != null) {
				hql = hql + " AND ext_1 ='" + iary.getExt_1() + "'";
			}
			if (iary.getExt_2() != null) {
				hql = hql + " AND ext_2 ='" + iary.getExt_2() + "'";
			}
			if (iary.getExt_3() != null) {
				hql = hql + " AND ext_3 ='" + iary.getExt_3() + "'";
			}
			if (iary.getExt_4() != null) {
				hql = hql + " AND ext_4 ='" + iary.getExt_4() + "'";
			}
			if (iary.getExt_5() != null) {
				hql = hql + " AND ext_5 ='" + iary.getExt_5() + "'";
			}
			if("CUSD".equals(dataCate)){
				if("C".equals(iary.getList_all_cus_flg())){
					hql = hql+" AND ext_5 in ('1','2')";
				}
				hql = hql + " ORDER BY data_item";
			}else{
				hql = hql + " ORDER BY DATA_CATE,DATA_ID,DATA_EXT";
			}
			List<Bis_data> bis_dataList = this.find(hql);
			List<XplstdatOA> oaryList = new ArrayList<XplstdatOA>();
			for (Bis_data bis_data : bis_dataList) {
				XplstdatOA oary = new XplstdatOA();
				oary.setData_seq_id(bis_data.getData_seq_id());
				oary.setData_cate(bis_data.getData_cate());
				oary.setData_id(bis_data.getData_id());
				oary.setData_ext(bis_data.getData_ext());
				oary.setData_item(bis_data.getData_item());
				oary.setData_desc(bis_data.getData_desc());
				oary.setExt_1(bis_data.getExt_1());
				oary.setExt_2(bis_data.getExt_2());
				oary.setExt_3(bis_data.getExt_3());
				oary.setExt_4(bis_data.getExt_4());
				oary.setExt_5(bis_data.getExt_5());
				oaryList.add(oary);
			}
			xplstdatO.setTbl_cnt(oaryList.size());
			xplstdatO.setOary(oaryList);
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}
	
	public XplstdatO queryformaker(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String dataCate = iary.getData_cate();
			String hql = "FROM Bis_data where data_cate ='CUSD' and ext_5 in ('1','2') and data_ext like '%" 
					+ iary.getData_ext() + "%'";
			List<Bis_data> bis_dataList = this.find(hql);
			List<XplstdatOA> oaryList = new ArrayList<XplstdatOA>();
			for (Bis_data bis_data : bis_dataList) {
				XplstdatOA oary = new XplstdatOA();
				oary.setData_seq_id(bis_data.getData_seq_id());
				oary.setData_cate(bis_data.getData_cate());
				oary.setData_id(bis_data.getData_id());
				oary.setData_ext(bis_data.getData_ext());
				oary.setData_item(bis_data.getData_item());
				oary.setData_desc(bis_data.getData_desc());
				oary.setExt_1(bis_data.getExt_1());
				oary.setExt_2(bis_data.getExt_2());
				oary.setExt_3(bis_data.getExt_3());
				oary.setExt_4(bis_data.getExt_4());
				oary.setExt_5(bis_data.getExt_5());
				oaryList.add(oary);
			}
			xplstdatO.setTbl_cnt(oaryList.size());
			xplstdatO.setOary(oaryList);
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}
	
	public XplstdatO querybycate(XplstdatI xplstdatI) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		try {
			XplstdatIA iary = xplstdatI.getIary().get(0);
			String dataCate = iary.getData_cate();
			String sql = "SELECT A.* FROM BIS_DATA A JOIN BIS_MTRL B ON A.EXT_1=B.MTRL_PROD_ID WHERE A.DATA_CATE ='CSMT' "
					+ "AND B.MTRL_CATE='SHMT' AND A.DATA_ITEM ='" 
					+ iary.getData_item() + "'";
			List<Bis_data> bis_dataList = this.findBySQL(sql,Bis_data.class);
			List<XplstdatOA> oaryList = new ArrayList<XplstdatOA>();
			for (Bis_data bis_data : bis_dataList) {
				XplstdatOA oary = new XplstdatOA();
				oary.setData_seq_id(bis_data.getData_seq_id());
				oary.setData_cate(bis_data.getData_cate());
				oary.setData_id(bis_data.getData_id());
				oary.setData_ext(bis_data.getData_ext());
				oary.setData_item(bis_data.getData_item());
				oary.setData_desc(bis_data.getData_desc());
				oary.setExt_1(bis_data.getExt_1());
				oary.setExt_2(bis_data.getExt_2());
				oary.setExt_3(bis_data.getExt_3());
				oary.setExt_4(bis_data.getExt_4());
				oary.setExt_5(bis_data.getExt_5());
				oaryList.add(oary);
			}
			xplstdatO.setTbl_cnt(oaryList.size());
			xplstdatO.setOary(oaryList);
		} catch (Exception ex) {
			logger.error(Util.stackTraceToString(ex));
			xplstdatO.setRtn_code(E_XPLSTDAT_OTHER_ERROR + "");
			xplstdatO.setRtn_mesg(ex.toString());
			return xplstdatO;
		}
		xplstdatO.setRtn_code(RETURN_CODE_OK);
		xplstdatO.setRtn_mesg("success");
		return xplstdatO;
	}
	public boolean checkEdiCusProc(String cusName,String cusId) {
		XplstdatO xplstdatO = new XplstdatO();
		xplstdatO.setTrx_id("XPLSTDAT");
		xplstdatO.setType_id("O");
		String hql = "FROM Bis_data where data_cate = ? AND data_ext= ? and data_item = ? ";
		return this.list(hql, "EDIC",cusName,cusId).isEmpty() ? false : true;
		
	}
}
